import java.io.BufferedReader;


import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


public class Dados {
	
	List<String[]> dadosDeLugares = new ArrayList<String[]>(); 
	List<Estabelecimento> estabelecimentos = new ArrayList<Estabelecimento>(); 
	
	List<String[]> dadosDeOpinioes = new ArrayList<String[]>(); 
	List<String[]> opinioesDeEstabelecimentos = new ArrayList<String[]>(); 
	List<Perfil> usuarios = new ArrayList<Perfil>(); 
	
	List<Estabelecimento> estabComPopularidadeOrdenada = new ArrayList<Estabelecimento>(); 

	
	/**
	 * Ler os dados do arquivo que contem informacoes dos lugares para se almocar
	 * e organiza estes dados em uma lista contendo os lugares com seus respectivos dados.
	 * @throws IOException
	 */
	public void lerDadosDeEstabelecimentos() throws IOException{
		
		BufferedReader in = null;
		
		try{
			in = new BufferedReader(new FileReader("Estabelecimentos.data"));
			String linha;
			
			while((linha = in.readLine()) != null){
				String[] op = linha.split(";");
				dadosDeLugares.add(op);
				
			}
			
			Iterator<String[]> it = dadosDeLugares.iterator();
			
			while(it.hasNext()){
				String[] dados = it.next();
				if(dados.length == 3){
					Estabelecimento estabelecimento = new Estabelecimento(dados[0], dados[1], dados[2]);
					estabelecimentos.add(estabelecimento);
				}
			}
		}
		finally{
			if (in != null){
				in.close();
			}
		}
		
	}
	
	/**
	 * Ler os dados do arquivo que contem as opinioes dos usuarios sobre os estabelecimentos
	 * @throws IOException
	 */
	public void lerOpinioesDosUsuarios() throws IOException{
		
		BufferedReader in = null;
		String dataEHora;
		String nome;
		
		try{
			in = new BufferedReader(new FileReader("opinioes-dos-usuarios-v2.data"));
			String linha;
			
			while((linha = in.readLine()) != null){
				String[] opnioes = linha.split(";");
				dadosDeOpinioes.add(opnioes);
				
			}
			
			Iterator<String[]> it = dadosDeOpinioes.iterator();
		
			
			for (int i = 0; i < 167; i++) {
				String[] opinioes = new String[39];
				opinioesDeEstabelecimentos.add(opinioes);
			}
			
			int contadorAnonimo = 1;
			int contador = 0;
			while(it.hasNext()){
				
				String[] dados = it.next();
				dataEHora = dados[0];
				if(dados[1].equals("")){
					nome = "Anonimo " + contadorAnonimo;
					contadorAnonimo++;
				}
				else{
					nome = dados[1];
					
				}
				
				for (int i = 2; i < 41 ; i++){
					opinioesDeEstabelecimentos.get(contador)[i-2] = dados[i];
			
				}
				
				Perfil usuario = new Perfil(dataEHora, nome, opinioesDeEstabelecimentos.get(contador));
				usuarios.add(usuario);
				contador++;
			}
		}
		finally{
			if (in != null){
				in.close();
			}
		}
		
	}
	
	/**
	 * Ordena de acordo com a popularidade os estabelecimentos em uma lista.
	 * @throws IOException
	 */
	public void popularidadeOrdenada() throws IOException{
		
		List<Estabelecimento> estabelecimentos2 = new ArrayList<Estabelecimento>(); 
		
		for (int i = 0; i < estabelecimentos.size(); i++) {
			estabelecimentos2.add(estabelecimentos.get(i));
		}
		
		for (int i = 0; i < estabelecimentos.size(); i++) {
			int maior = 0;
			int c = 0;
			int indice = 0;
			Iterator<Estabelecimento> it = estabelecimentos2.iterator();
			while(it.hasNext()){
				Estabelecimento estab = it.next();
				estab.popularidade();
				if(estab.getPopularidade() > maior){
					maior = estab.getPopularidade();
					indice = c;
				}
				estab.zeraPopularidade();
				c++;
			
			}
			estabComPopularidadeOrdenada.add(estabelecimentos2.get(indice));
			estabelecimentos2.remove(indice);
			
		}
		
		for (int i = 0; i < estabComPopularidadeOrdenada.size(); i++) {
			if(estabComPopularidadeOrdenada.get(i).getNome().equals("Nome")){
				estabComPopularidadeOrdenada.remove(i);
			}
		}
	}
		
}
